home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February / PCWorld_2008-02_cd.bin / domacnost a kancelar / move action / moveaction.exe / FTPThread.pas < prev    next >
Pascal/Delphi Source File  |  2007-12-27  |  3KB  |  122 lines

  1. {thread that runs in the background & FTPs any new JPG files it finds}
  2. unit FTPthread;
  3.  
  4. interface
  5.  
  6. uses
  7.   Classes, Windows, SysUtils, inifiles, NMFTP,dialogs;
  8.  
  9. type
  10.   TFTPUploader = class(TThread)
  11.   private
  12.    remoteDirectory, uploadFileName: string;
  13.    imageCount: integer;
  14.    checkfileinterval: integer;
  15.   protected
  16.     NMFTP1: TNMFTP;
  17.     procedure Execute; override;
  18.     function LPad(s: String; nLength: integer): string ;
  19.   public
  20.     constructor create(IniFile: TIniFile; _imageCount: integer; _ftpPassword: string);
  21.     destructor Destroy; override;
  22.   end;
  23.  
  24. implementation
  25.  
  26.  
  27.  
  28.  
  29. {constructor}
  30. constructor TFTPUploader.create(IniFile: TIniFile; _imageCount: integer; _ftpPassword: string);
  31. var
  32.    host,user,password : string;
  33.    port : integer;
  34.    passive: boolean;
  35. begin
  36.    inherited create(true); // create but don't start running yet
  37.  
  38.    password:= _ftpPassword;
  39.    imageCount := _imageCount+1;
  40.    with IniFile do
  41.    begin
  42.       checkfileinterval := ReadInteger('main', 'ftp.checkfileinterval', 500);
  43.       host := ReadString('main', 'ftp.host', 'localhost');
  44.       port := ReadInteger('main', 'ftp.port', 21);
  45.       user := ReadString('main', 'ftp.user', 'anonymous');
  46.       // password := ReadString('main', 'ftp.password', 'password@anonymous.com');
  47.       passive := ReadBool('main', 'ftp.passive', false);
  48.       remoteDirectory := ReadString('main', 'ftp.remoteDirectory', '/');
  49.       uploadFileName := ReadString('main', 'ftp.uploadFileName', '');
  50.    end;
  51.  
  52.    NMFTP1 := TNMFTP.create(nil);
  53.    NMFTP1.Host := host;
  54.    NMFTP1.Port := port;
  55.    NMFTP1.UserID := user;
  56.    NMFTP1.Password := password;
  57.    NMFTP1.Passive := passive;
  58.    NMFTP1.TimeOut := 60000;
  59. end;
  60.  
  61. {destructor}
  62. destructor TFTPUploader.Destroy;
  63. begin
  64.    inherited destroy;
  65. end;
  66.  
  67.  
  68. {main thread entry point}
  69. procedure TFTPUploader.Execute;
  70. var
  71.    filename: string;
  72. begin
  73.    filename := 'image_' + lpad(inttostr(imageCount), 6) + '.jpg';
  74.  
  75.    // this thread looks for the next image file number, and uploads it when found
  76.    repeat
  77.  
  78.        while FileExists(filename) do
  79.       begin
  80.          try
  81.             if not NMFTP1.Connected then
  82.             begin
  83.                NMFTP1.Connect;
  84.                NMFTP1.ChangeDir(remoteDirectory);
  85.                NMFTP1.Mode(MODE_IMAGE); // presume this means binary
  86.             end;
  87.  
  88.             // use actual filename (with sequence)
  89.             // or fixed filename?
  90.             if length(uploadFileName) > 0 then
  91.                NMFTP1.Upload(filename, uploadFileName)
  92.             else
  93.                NMFTP1.Upload(filename, filename);
  94.             
  95.             inc(imageCount);
  96.             filename := 'image_' + lpad(inttostr(imageCount), 6) + '.jpg';
  97.          except
  98.             on e:exception do
  99.             begin
  100.                // zoinks - now what?  we don't have a log or console...leave this to you to modify!
  101.             end;
  102.          end;
  103.       end;
  104.  
  105.       if NMFTP1.Connected then NMFTP1.Disconnect;
  106.       sleep(checkfileinterval);
  107.  
  108.    until terminated;
  109.  
  110. end;
  111.  
  112.  
  113. {left-pads a string}
  114. function TFTPUploader.LPad(s: String; nLength: integer): string ;
  115. begin
  116.      while length(s) < nLength do
  117.            s := '0' + s ;
  118.      result := s ;
  119. end ;
  120.  
  121. end.
  122.